package com.lnsoft.cac.server.handle.codec.frameMessage;


import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import lombok.Data;
import lombok.NonNull;

@Data
/**
 * 通信流量数据报-升级启动报文
 * */
public class Upgrade_Start_Cfm {
    /**
     * 数据发送状态：①0x01表示正常
     * ②0x02表示文件过大
     * 错误！未找到引用源。0x03表示文件过小
     * 错误！未找到引用源。0x04帧数计算错误
     * 错误！未找到引用源。0x05每包发送字节过大
     * 错误！未找到引用源。0x06每包发送字节过小
     * 错误！未找到引用源。0x07其他表示异常
     * */
    private int Rev_Status;                 //1byte
    private int Begin_Subpacket_No;         //2byte     起始子包包号（从0开始的无符号整数，当包号大于0时，表示接着上一次的升级过程进行续传）


    public ByteBuf toByteBuf() throws Exception{
        if (Rev_Status != (byte)0x01 && Rev_Status != (byte)0x02 && Rev_Status != (byte)0x03 && Rev_Status != (byte)0x04 && Rev_Status != (byte)0x05 && Rev_Status != (byte)0x06 && Rev_Status != (byte)0x07) {
            throw new Exception("数据发送状态 设置异常");
        }
        ByteBuf bf = Unpooled.buffer(3);
        bf.writeByte(Rev_Status);
        bf.writeShortLE(Begin_Subpacket_No);
        return bf;
    }


    //  解析 [升级启动-确认] 帧报文内容区 到消息体中
    public static Upgrade_Start_Cfm decFrameBody(@NonNull byte[] frameBody) throws Exception {
        ByteBuf bf = Unpooled.wrappedBuffer(frameBody);
        Upgrade_Start_Cfm msg = new Upgrade_Start_Cfm();
        int len = frameBody.length;
        if (len == 0) {
            return null;
        }
        if (3 != len) {
            throw new Exception("frameBody 数据异常");
        }
        msg.setRev_Status(bf.getUnsignedByte(0));
        msg.setBegin_Subpacket_No(bf.getUnsignedShortLE(1));
        return msg;
    }

}
